import type { AxiosRequestConfig, AxiosResponse } from 'axios'

export interface HYRequestInterceptors<T = AxiosResponse> {
  // 因为请求拦截器的参数要求是一个config配置，所以我们需要将它的类型设置为AxiosRequestConfig
  requestInterceptor?: (cnofig: AxiosRequestConfig) => AxiosRequestConfig
  // 请求失败参数和返回值都是any
  requestInterceptorCatch?: (err: any) => any
  // 响应成功拦截器的参数是一个res对象，有相关的成功参数，axios为他单独定义了一个接口叫做AxiosResponse
  responseInterceptor?: (res: T) => T
  // 响应失败拦截器的参数和返回值都是any
  responseInterceptorCatch?: (err: any) => any
}

export interface HYRequestConfig<T = AxiosResponse> extends AxiosRequestConfig {
  interceptors?: HYRequestInterceptors<T>
  showLoading?: boolean
}
